# coding=utf-8

from pymongo import MongoClient
from bs4 import BeautifulSoup
import requests
import datetime
import pprint
import json
import time
import re

server_client = MongoClient('127.0.0.1', 27017)

server_db = server_client['knx_posts_db']
offical_posts_coll = server_db['offical_posts_coll']

# class POST():
#     def __init__(self):
#         self.company = '唯品会（中国）有限公司'
#         self.url = "http://campus.vip.com/js/job.js"
#         self.params = {
#             '_': 1520413002900
#         }
#         self.data = {
#
#         }
#         self.headers = {
#             'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
#             'Accept-Encoding': 'gzip, deflate',
#             'Accept-Language': 'zh-CN,zh;q=0.9',
#             'Host': 'campus.vip.com',
#             'Referer': 'http://campus.vip.com/job.html?page=5',
#             'User-Agent': '',
#             'X-Requested-With': 'XMLHttpRequest'
#         }
#         self.scrapy()
#
#     def scrapy(self):
#         self.params['_'] = time.time()
#         r = requests.get(self.url, params = self.params, headers = self.headers)
#         txt = r.text
#         it = re.findall(r'{Id: \w+, job.*\s*.*}', txt)
#         for job in it:
#             description = re.search(r'Qualifications: \"(.*?)\"}', job).group(1)
#             name = re.search(r'Subject: \"(.*?)\"', job).group(1)
#             count = re.search(r'Num: ?(\w+)', job).group(1)
#             location = re.search(r'Area: \"(.*?)\"', job).group(1)
#
#             url = 'http://campus.vip.com/job.html?page=5'
#
#             edu = ''
#             date = ''
#             funType = re.search(r'Genre: \"(.*?)\"', job).group(1)
#             item = {
#                 "url": url,  # jd详情页的地址
#                 'edu': edu,  # 最低学历
#                 'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
#                 'name': name,  # 职位名称 *
#                 'date': date,  # 职位发布日期，字符串形式即可，后期统一转换
#                 'lang': '',  # 对语言的要求
#                 'place': '',  # 办公具体地址
#                 'major': '',  # 专业要求
#                 'count': count,  # 招聘数量
#                 'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
#                 'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
#                 'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
#                 'funType': funType,  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
#                 'company': self.company,  # 企业名称
#                 'location': location,  # 所在城市
#                 'industry': 'IT互联科技行业',  # 企业所在行业
#                 'keywords': [],  # 此岗位的搜索关键字
#                 'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
#                 'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
#                 'description': description,  # 职位的详细描述，包括职责、要求之类的
#                 'subIndustry': '',  # 一律为空字符串
#                 'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
#             }
#             print(item['company'], item['name'])
#
#             if not offical_posts_coll.find_one({'name': item['name'], 'company': item['company'], 'location': item['location']}):
#                 offical_posts_coll.insert_one(item)
#
#
# POST()


r = requests.get('http://campus.vip.com/js/job.js')

for i, j, k, z in zip(re.findall('city\":(.+)\"', r.text), re.findall('postCate\":(.+)\"', r.text), re.findall('jobName\":(.+)\"', r.text), re.findall('jobDet\":(.+)\"', r.text)):
    company = '唯品会（中国）有限公司'
    description = z[2:]
    location = i[2:]
    name = k[2:]

    item = {
        "url": '',  # jd详情页的地址
        'edu': '',  # 最低学历
        'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
        'name': name,  # 职位名称 *
        'date': '',  # 职位发布日期，字符串形式即可，后期统一转换
        'lang': '',  # 对语言的要求
        'place': '',  # 办公具体地址
        'major': '',  # 专业要求
        'count': -1,  # 招聘数量
        'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
        'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
        'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
        'funType': '',  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
        'company': company,  # 企业名称
        'location': location,  # 所在城市
        'industry': 'IT互联科技行业',  # 企业所在行业
        'keywords': [],  # 此岗位的搜索关键字
        'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
        'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
        'description': description,  # 职位的详细描述，包括职责、要求之类的
        'subIndustry': '',  # 一律为空字符串
        'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
    }

    if not offical_posts_coll.find_one({'name': name, 'company': company}):
        offical_posts_coll.insert_one(item)
        print(company, name)
